package notify

import (
	"context"
	mCache "service/model/hr_cache"
	"service/model/mod"
	model "service/model/notify"
	"time"

	gpb "gitee.com/cloudapex/protos/crm_message/pb"
	gupb "gitee.com/cloudapex/protos/hr_cache/pb"
	"gitee.com/cloudapex/ulern/htp"
	"gitee.com/cloudapex/ulern/util"
	"github.com/gin-gonic/gin"
)

/*type CompyList struct {
	Id      int64  `form:"id" json:"id"`           //  公司消息ID
	CommpId int64  `form:"commpId" json:"commpId"` //  commpId 公司ID
	Title   string `form:"title" json:"title"`     //  title   标题
	Content string `form:"content" json:"content"` //  content 内容
	UserId  int64  `form:"userId" json:"userId"`   //  userId  创建者
	FileUrl string `form:"fileUrl" json:"fileUrl"` //  fileUrl 文件地址Url
	NoType  int64  `form:"noType" json:"noType"`   //  noType  通知类型 1、质检通报2、质检警告3、任免通知
	Status  int64  `form:"status" json:"status"`   //  status  消息状态 1 草稿, 2 发布，3 停用， 4 删除
	At      int64  `form:"at" json:"at"`
	UserName      string  `form:"userName" json:"userName"` //  创建人

}*/

/*
 * 描述: 职能对接人员列表
 * 路由: /notify/adminCompyList
 * 方法: POST
 *********************************************************************/
type AdminCompyList struct {
	mod.SortFinder
	mod.PageFinder
	Title  string `form:"title" json:"title"`   //  title   标题
	NoType int64  `form:"noType" json:"noType"` //  noType  通知类型 1、质检通报2、质检警告3、任免通知
	Status int64  `form:"status" json:"status"` //  status  消息状态 1 草稿, 2 发布，3 停用， 4 删除

}
type AdminCompyListRes struct {
	Id       int64  `json:"id"`       //消息ID
	CommpId  int64  `json:"commpId"`  //公司ID
	Title    string `json:"title"`    //标题
	Content  string `json:"content"`  //内容
	UserId   int64  `json:"userId"`   //创建者ID
	FileUrl  string `json:"fileUrl"`  //文件地址Url
	NoType   int64  `json:"noType"`   //通知类型 1 活动方案，2 人事调整， 3 工资绩效，4: 其他
	Status   int64  `json:"status"`   //消息状态 1 草稿, 2 发布，3 停用， 4 删除
	At       int64  `json:"at"`       //创建时间
	UserName string `json:"userName"` //创建人名称
}

func (this *AdminCompyList) Handle(c *gin.Context, ctx context.Context) htp.Response {
	jwtUser := mod.CurrUser(c)

	//传参
	compyListreq := &gpb.CmpNoticeListReq{
		Page:  int64(this.Page),
		Count: int64(this.Pnum),
		Order: int64(this.Order),
		Orule: int64(this.Orule + 1),

		Title:   this.Title,
		NoType:  this.NoType,
		Status:  this.Status,
		CommpId: jwtUser.CId,
	}
	list, err := model.Compy.GetList(ctx, compyListreq)
	if list == nil || nil != err {
		return htp.RespOK("", &struct {
			Total int64       `json:"total"`
			List  interface{} `json:"list"`
		}{0, nil})
	}

	//映射
	items := []AdminCompyListRes{}
	if err := util.Convert(&items, list.Data); err != nil {
		return htp.RespConvertErr("", err)
	}

	ids := make([]int64, 0)

	for _, f := range items {
		bo := false
		if len(ids) > 0 {
			for _, id := range ids {
				if id == f.UserId {
					bo = true
				}
			}
		}
		if !bo {
			ids = append(ids, f.UserId)
		}
	}
	if ids != nil && len(ids) > 0 {

		res, err := mCache.UserCacheServer.UserNameList(ctx, &gupb.UserLoginReqIdsReq{
			CId: jwtUser.CId,
			Ids: ids,
		})

		if err == nil && res != nil && len(res.NameList) > 0 {
			for i, _ := range items {
				com := &items[i]

				for _, resname := range res.NameList {
					if resname.Id == com.UserId {
						com.UserName = resname.Name
					}
				}

			}
		}
	}

	if err != nil {
		return htp.RespModelErr("", err)
	}

	return htp.RespOK("", &struct {
		Total int64       `json:"total"`
		List  interface{} `json:"list"`
	}{list.Pager.Total, items})

}

/*
 * 描述: 添加公司公告
 * 路由: /notify/adminAddCompy
 * 方法: POST
 *********************************************************************/
type AddCompy struct {
	Title   string `form:"title" json:"title" binding:"required"`     //  title   标题
	Content string `form:"content" json:"content" binding:"required"` //  content 内容
	FileUrl string `form:"fileUrl" json:"fileUrl" `                   //  fileUrl 文件地址Url
	NoType  int64  `form:"noType" json:"noType" binding:"required"`   //  noType  通知类型 1、质检通报2、质检警告3、任免通知
}

func (this *AddCompy) Handle(c *gin.Context, ctx context.Context) htp.Response {

	jwtUser := mod.CurrUser(c)
	req := &gpb.CmpNoticeCreateReq{
		Title:   this.Title,
		Content: this.Content,
		FileUrl: this.FileUrl,
		NoType:  this.NoType,
		CommpId: jwtUser.CId,
		UserId:  jwtUser.UId,
		Status:  1,
		At:      time.Now().Unix(),
	}
	res, err := model.Compy.Add(ctx, req)
	if err != nil {
		return htp.RespModelErr("", err)
	}

	if res.Status != 0 {
		return htp.RespErr(int(res.Status), "添加成功", nil)
	}
	return htp.RespOK("", "")
}

/*
 * 描述: 修改公司公告
 * 路由: /notify/adminUpCompy
 * 方法: POST
 *********************************************************************/
type UpCompy struct {
	Id      int64  `form:"id" json:"id"`                              //  公司消息ID
	Title   string `form:"title" json:"title" binding:"required"`     //  title   标题
	Content string `form:"content" json:"content" binding:"required"` //  content 内容
	FileUrl string `form:"fileUrl" json:"fileUrl"`                    //  fileUrl 文件地址Url
	NoType  int64  `form:"noType" json:"noType" binding:"required"`   //  noType  通知类型 1、质检通报2、质检警告3、任免通知
}

func (this *UpCompy) Handle(c *gin.Context, ctx context.Context) htp.Response {

	jwtUser := mod.CurrUser(c)
	req := &gpb.CmpNoticeCreateReq{
		UserId:  jwtUser.UId,
		Id:      this.Id,
		Title:   this.Title,
		Content: this.Content,
		FileUrl: this.FileUrl,
		NoType:  this.NoType,
	}
	res, err := model.Compy.Update(ctx, req)
	if err != nil {
		return htp.RespModelErr("", err)
	}
	if res.Status != 0 {
		return htp.RespErr(int(res.Status), "修改成功", nil)
	}
	return htp.RespOK("", "")
}

/*
 * 描述: 详情公司公告
 * 路由: /notify/ywInfoCompy
 * 方法: POST
 *********************************************************************/
type InfoCompy struct {
	Id int64 `form:"id" json:"id"` //  公司消息ID
}

func (this *InfoCompy) Handle(c *gin.Context, ctx context.Context) htp.Response {

	req := &gpb.CmpNoticeCreateReq{
		Id: this.Id,
	}
	_, err := model.Compy.Info(ctx, req)
	if err != nil {
		return htp.RespModelErr("", err)
	}
	return htp.RespOK("", "")
}

/*
 * 描述: 更新公司公告状态
 * 路由: /notify/adminUpdateStateCompy
 * 方法: POST
 *********************************************************************/
type UpdateState struct {
	Ids    []int64 `form:"ids" json:"ids"` //  公司消息ID
	Status int64   `form:"status" json:"status"`
}

func (this *UpdateState) Handle(c *gin.Context, ctx context.Context) htp.Response {

	req := &gpb.CmpNoticeStatusReq{
		Ids:    this.Ids,
		Status: this.Status,
	}
	_, err := model.Compy.UpdateStatus(ctx, req)
	if err != nil {
		return htp.RespModelErr("", err)
	}
	return htp.RespOK("", "")
}
